{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MLPaint: Real-Time Handwritten Digits Recognizer\n",
    "\n",
    "The automatic recognition of handwritten digits is now a well understood and studied Machine Vision and Machine Learning problem. We will be using MNIST (check out Wikipedia's page on [MNIST](https://en.wikipedia.org/wiki/MNIST_database)) to train our models. From the description on Yann LeCun's [MNIST database of handwriten digits](http://yann.lecun.com/exdb/mnist/):\n",
    "\n",
    "> The MNIST database of handwritten digits, available from this page, has a training set of 60,000 examples, and a test set of 10,000 examples. It is a subset of a larger set available from NIST. The digits have been size-normalized and centered in a fixed-size image.\n",
    "> It is a good database for people who want to try learning techniques and pattern recognition methods on real-world data while spending minimal efforts on preprocessing and formatting.\n",
    "\n",
    "\n",
    "To learn more, you can also check out Kaggle's [Digit Recognizer](https://www.kaggle.com/c/digit-recognizer) page.\n",
    "\n",
    "In this demo will use MLDB's [classifiers functions](../../../../doc/#builtin/functions/ClassifierApply.md.html) and [REST API](../../../../doc/#builtin/WorkingWithRest.md.html), to create a plug-in to predict the value of handwritten digits. We will also use MLDB's [explain functions](../../../../doc/#builtin/functions/ClassifierExplain.md.html) to visually represent the predictive \"value or importance\" of each pixel in our final predictions.\n",
    "\n",
    "Check out the video below for a demo of what we'll be creating:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/jpeg": "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\n",
      "text/html": [
       "\n",
       "        <iframe\n",
       "            width=\"400\"\n",
       "            height=\"300\"\n",
       "            src=\"https://www.youtube.com/embed/WGdLCXDiDSo\"\n",
       "            frameborder=\"0\"\n",
       "            allowfullscreen\n",
       "        ></iframe>\n",
       "        "
      ],
      "text/plain": [
       "<IPython.lib.display.YouTubeVideo at 0x7fb85a4d0ad0>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import YouTubeVideo\n",
    "YouTubeVideo(\"WGdLCXDiDSo\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The notebook cells below use `pymldb`'s `Connection` class to make [REST API](../../../../doc/#builtin/WorkingWithRest.md.html) calls. You can check out the [Using `pymldb` Tutorial](../../../../doc/nblink.html#_tutorials/Using pymldb Tutorial) for more details."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from pymldb import Connection\n",
    "mldb = Connection()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "... and other Python librairies:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import random\n",
    "import math\n",
    "import numpy as np\n",
    "from pandas import DataFrame\n",
    "import pandas as pd\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from IPython.display import display\n",
    "from ipywidgets import widgets"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Loading the data\n",
    "\n",
    "A pickled version of the dataset is available on the [deeplearning.net website](http://deeplearning.net/tutorial/gettingstarted.html).\n",
    "\n",
    "The dataset has been unpickled and saved in a public Amazon's S3 cloud storage. Check out MLDB's [Protocol Handlers](../../../../doc/#builtin/Url.md.html) for Files and URLS."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "data_url_mnist = 'http://public.mldb.ai/datasets/digits_data.csv.gz'\n",
    "\n",
    "print mldb.put('/v1/procedures/import_digits_mnist', {\n",
    "    \"type\":\"import.text\",\n",
    "    \"params\": {\n",
    "        \"dataFileUrl\": data_url_mnist,\n",
    "        \"outputDataset\": \"digits_mnist\",\n",
    "        \"select\": \"{* EXCLUDING(\\\"785\\\")} AS *, \\\"785\\\" AS label\",\n",
    "        \"runOnCreation\": True,\n",
    "    }\n",
    "})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the original MNIST datasets, the features and labels were in two seperate datasets. To make it easier, we joined the features with the labels. Column 785 is the labels column which was renamed accordingly 'label'."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Let's explore the data\n",
    "\n",
    "See the [Query API](../../../../doc/#builtin/sql/QueryAPI.md.html) documentation for more details on SQL queries."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "          NoOfFeatures  TestExamples\n",
      "_rowName                            \n",
      "[]                 784         60000\n"
     ]
    }
   ],
   "source": [
    "data_stats = mldb.query(\"\"\"\n",
    "    SELECT \n",
    "        avg(horizontal_count({* EXCLUDING(label)})) as NoOfFeatures,\n",
    "        count(label) AS TestExamples\n",
    "    FROM digits_mnist \n",
    "\"\"\")\n",
    "print data_stats"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each example is a row made up of 784 pixels or features. By reshaping the 1D data into a 2D representation, we can visualize the data a little better. At each refresh, we get randomly selected rows for each label using the [`sample` function in a SQL From Expression](../../../../doc/#builtin/sql/FromExpression.md.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "labels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n",
    "\n",
    "x_array1 = []\n",
    "x_array2 = []\n",
    "x_data = []\n",
    "sq = int(np.sqrt(data_stats['NoOfFeatures'][0]))\n",
    "\n",
    "for label in labels:\n",
    "\n",
    "    x_data = mldb.query(\"\"\"\n",
    "        SELECT * EXCLUDING(label) \n",
    "        FROM sample(\n",
    "                (select * FROM digits_mnist WHERE label = %d AND rowHash() %% 5 = 0),\n",
    "                {rows: 1}\n",
    "        )\n",
    "    \"\"\" %label)\n",
    "    \n",
    "    if label < 5:\n",
    "        x_array1.extend(x_data.as_matrix().reshape(sq, sq))\n",
    "    if label >= 5:\n",
    "        x_array2.extend(x_data.as_matrix().reshape(sq, sq))    \n",
    "\n",
    "f, (fig1, fig2) = plt.subplots(1, 2, sharey=True)\n",
    "plt.gray()\n",
    "fig1.matshow(x_array1)\n",
    "fig2.matshow(x_array2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Training a classifier\n",
    "We will create a [Procedure](../../../../doc/#builtin/procedures/Procedures.md.html) of type [`classifier.experiment`](../../../../doc/#builtin/procedures/ExperimentProcedure.md.html) to train and test our model. The `configuration` parameter defines a Random Forest algorithm. The model make take some time to train..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "conf_algo =  {\n",
    "    \"bbdt_d5\": {\n",
    "        \"type\": \"bagging\",\n",
    "        \"verbosity\": 3,\n",
    "        \"weak_learner\": {\n",
    "            \"type\": \"boosting\",\n",
    "            \"verbosity\": 3,\n",
    "            \"weak_learner\": {\n",
    "                \"type\": \"decision_tree\",\n",
    "                \"max_depth\": 7,\n",
    "                \"verbosity\": 0,\n",
    "                \"update_alg\": \"gentle\",\n",
    "                \"random_feature_propn\": 0.3\n",
    "            },\n",
    "            \"min_iter\": 5,\n",
    "            \"max_iter\": 30\n",
    "        },\n",
    "        \"num_bags\": 5\n",
    "    }\n",
    "}\n",
    "\n",
    "conf_class = {\n",
    "    \"type\": \"classifier.experiment\",\n",
    "    \"params\": {\n",
    "        \"experimentName\": \"mnist_model\",\n",
    "        \"mode\": \"categorical\",\n",
    "        \"inputData\" : \"\"\"\n",
    "            SELECT \n",
    "                {* EXCLUDING(label*)} AS features, \n",
    "                label AS label\n",
    "            FROM digits_mnist\n",
    "        \"\"\",\n",
    "        \"datasetFolds\": [\n",
    "            {\n",
    "                \"trainingWhere\": \"rowHash() % 5 != 0\", #80% of total data\n",
    "                \"testingWhere\": \"rowHash() % 5 = 0\"    #20% of total data\n",
    "            }\n",
    "        ],\n",
    "        \"algorithm\": \"bbdt_d5\",\n",
    "        \"configuration\": conf_algo,\n",
    "        \"modelFileUrlPattern\": \"file://models/mnist_model.cls\",\n",
    "        \"keepArtifacts\": True,\n",
    "        \"outputAccuracyDataset\": True,   \n",
    "        \"runOnCreation\": True,\n",
    "        \"evalTrain\": True\n",
    "    }\n",
    "}\n",
    "\n",
    "results = mldb.put(\"/v1/procedures/mnist_model\", conf_class)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Model classification accuracy on test set = 0.9944\n",
      "\n"
     ]
    }
   ],
   "source": [
    "accuracy = results.json()['status']['firstRun']['status']['aggregatedTest']['weightedStatistics']['accuracy']['mean']\n",
    "print \"\\nModel classification accuracy on test set = %0.4f\\n\" % accuracy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are now going to construct the confusion matrix from results on the test set using the [`pivot` aggregate function](../../../../doc/#builtin/sql/ValueExpression.md.html). You can learn more about confusion matrices [here](https://en.wikipedia.org/wiki/Confusion_matrix)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7fb85a516750>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\npS1JUicsbUmSOmFpS5LUiTVc2he3DrAIF7cOsAintw4wznnTrROM9sPpc1tHGO/i6dYJRrq4dYDx\nvjrdOsF45063TjDKVxvs09LuysWtAyzCp1oHGOf86dYJRruqx9L+5nTrBCNd3DrAeF+bbp1gvC9M\nt04wiqUtSZLmZWlLktSJVFXrDFuUZHUHlCRpiVVV5pq/6ktbkiQNHB6XJKkTlrYkSZ2wtCVJ6oSl\nLUlSJ9ZkaSc5MsmFSa5JclaS/Vtnmk+Shyb5lySXJtmU5LDWmbYkyQuTfDbJVUm+m+QDSX61da4t\nmbwezp1kvirJp5P8dutcCzX5nm9K8prWWeaT5NhJxpnTZa1zbU2S3ZKcOHktX5PkS0ke2jrXfJJc\nNMf3eVOSU1pnm0uSdUleNuP38YVJXpxkVXdTklsneXWSi5NcneT0JPuuxL5X9TdmOSR5PPBq4CXA\n/YFPA6cmuXPTYPO7NfBF4Cjg6sZZFuJhwGuBBwEHANcBpyW5bdNUW3YJ8BfArwP7AB8H3p/kfk1T\nLUCS/YAjgB5ui3YBcAdgt8n0a23jbFmSnRhu6VfAQcC9gWcD322Zayv25frv727A3gz5390y1BYc\nDfwp8CzgXgy/544EXtgy1AK8GXgkcChwX+BjDL/ndl/uHa+5t3wlOQP4fFU9fca8rwInV9XR7ZJt\nXZIfA8+sqn9unWWhktwKuAp4TFV9sHWehUryfeAFVfXG1lnmMymVzwFPAaaAL1bVUU1DzSPJscAf\nVNWq/0NosyQvAx5aVav2yHprkhwNPA/YvaqubZ1ntskIwBVVdfiMeScCO1fV7zYLtgVJdgB+DDy2\nqv51xvyzgA9V1YuWc/9r6kg7yc0YjqQ+NmvRR4EHr3yiNeFXGF5nV7YOshBJtkvyBGAH4JOt82zF\nG4D3VNUnWgdZoD2SfGsyBPquJHdrHWgrHgP8R5KTklye5Jwkz2wdaqQnA29bjYU9cSpwQJJ7ASS5\nD/AIYDX/gb89sA6Y/T29Blj2U61rqrSBXRm+2ZfPmn85w1CSlt7xwNnAZ1oH2ZIk952MZFwLvB44\nuKq+0jjWvJIcAewBHNM6ywKdATwJeDTwVIaft08nuV3LUFuxB8NQ7TeARzGcVntFkiObplqgJI8C\n1gOrdrSoql4HvAM4P8nPGU4FnlhVr2+bbH5V9ROG32fHJLnj5A/9QxhOCS778Pj2y70DrV1JjmMY\n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\nl5nOwRaR5FUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb85a5f1250>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "confusionMatrix = results.json()['status']['firstRun']['status']['folds'][0]['resultsTest']['confusionMatrix']\n",
    "confusionMatrix = pd.DataFrame(confusionMatrix).pivot_table(index=\"predicted\", columns=\"actual\")\n",
    "\n",
    "df = np.log(confusionMatrix)\n",
    "df = df.fillna(0)\n",
    "\n",
    "fig = plt.figure(figsize=(8, 8))\n",
    "plt.imshow(df, interpolation='nearest', cmap=plt.cm.jet)\n",
    "plt.yticks(np.arange(0, 10, 1), fontsize=14)\n",
    "plt.ylabel(\"Predicted\", fontsize=16)\n",
    "plt.xticks(np.arange(0, 10, 1), fontsize=14)\n",
    "plt.xlabel(\"Actual\", fontsize=16)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The model seems to be doing a pretty good job at classfication as seen with the confusion matrix above. In a small percentage of cases, the model seems to think that a '4' is a '9' and that a '3' is a '2'. The two sets of digits are similar in the concentration of pixels, so this makes some sense."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## How does the model make its predictions?\n",
    "\n",
    "The 'explain' function provides each pixel's weight on the final outcome.\n",
    "\n",
    "Let's create a function of type [`classifier.explain`](../../../../doc/#builtin/functions/ClassifierExplain.md.html) to help us understand what's happening here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<Response [201]>\n"
     ]
    }
   ],
   "source": [
    "print mldb.put('/v1/functions/mnist_explainer', { \n",
    "    \"id\": \"mnist_explainer\", \n",
    "    \"type\": \"classifier.explain\",\n",
    "    \"params\": { \"modelFileUrl\": \"file://models/mnist_model.cls\" }\n",
    "})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## We automatically get a REST API to test our model with individual digits\n",
    "\n",
    "The procedure above created for us a [Function](../../../../doc/#builtin/functions/Functions.md.html) of type [`classifier`](../../../../doc/#builtin/functions/ClassifierApply.md.html). We will be using two functions:\n",
    "* The scorer function: Scores aren't probabilities, but they can be used to create binary classifiers by applying a cutoff threshold. MLDB's `classifier.experiment` procedure that we have seen previously outputs a score for each digit (even the wrong ones).\n",
    "* The explain function: The explain function shows how each pixel and its value (black or white) of an image contributes to the model's prediction. We colored such pixels in green for positive contributions and red for negative contributions in Figure 2 below. In essense, pixels flagged in red in the explain figure should be changed to get a better score. For example, a white-colored pixel, that was seen frequently for digit '5' in the train set, will be flagged green if it seen for digit '5' in the test set. If the same pixel is actually of a different color for digit '5' in the test set, then the pixel will be flagged red.\n",
    "\n",
    "Note that the digits are from the test set - we used 80% of the data for training and 20% for testing. You can also get the same digit written differently by using the offset bar. We using an SQL offset - we are calling it 'other_example' in the code below. The offset specifies the number of rows to skip before returning values from the query expression."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nBGiwUZHXRazgAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb85a40c690>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def rgb_explain(x):\n",
    "    scale = 5\n",
    "    explain = [[0, 0, 0]] * data_stats['NoOfFeatures'][0] # [R,G,B] for color image\n",
    "    number_explain = len(x)\n",
    "    \n",
    "    for j, col in enumerate(x.columns.values):\n",
    "        try:\n",
    "            index = int(col)\n",
    "            val = x.values[0][j] * scale\n",
    "            if (val >= 0.2):\n",
    "                explain[index] = [0, val, 0] # make it green\n",
    "            elif (val <= -0.2):\n",
    "                explain[index] = [- val, 0, 0] # make it red\n",
    "        except:\n",
    "            pass\n",
    "    \n",
    "    return np.array(explain).reshape(sq, sq, 3)\n",
    "\n",
    "@widgets.interact\n",
    "def test_img_plot(digit = [0,9], other_example=[0,1000]):\n",
    "    \n",
    "    data = mldb.query(\"\"\"\n",
    "        SELECT \n",
    "            * EXCLUDING(label),\n",
    "            mnist_model_scorer_0({ features: {* EXCLUDING(label*)} })[scores] AS score\n",
    "        FROM digits_mnist\n",
    "        WHERE label = %(digit)d AND rowHash() %% 5 = 0\n",
    "        LIMIT 1\n",
    "        OFFSET %(offset)d\n",
    "    \"\"\" % {\"digit\": digit, \"offset\": other_example})\n",
    "    \n",
    "    data_array = data.as_matrix()\n",
    "    \n",
    "    rand_test_img = data_array[0][:-10].reshape(sq, sq)\n",
    "    scores = data_array[0][-10:]\n",
    "    \n",
    "    explain_data = mldb.query(\"\"\"\n",
    "        SELECT \n",
    "            mnist_explainer({\n",
    "                label: %(digit)d,\n",
    "                features: {* EXCLUDING(label)}\n",
    "            })[explanation] AS *\n",
    "        FROM digits_mnist \n",
    "        WHERE label = %(digit)d AND rowHash() %% 5 = 0\n",
    "        LIMIT 1\n",
    "        OFFSET %(offset)d\n",
    "    \"\"\" % {\"digit\": digit, \"offset\": other_example})\n",
    "        \n",
    "    explain_img = rgb_explain(explain_data)\n",
    "    \n",
    "    fig = plt.figure(figsize=(8, 8))\n",
    "    \n",
    "    # plot digit image\n",
    "    ax1 = plt.subplot2grid((4, 4), (0, 0), colspan=2, rowspan = 2)\n",
    "    ax1.imshow(rand_test_img)\n",
    "    ax1.set_title(\"Fig1: You chose the digit below\", fontsize=12, fontweight='bold')\n",
    "    \n",
    "    # plot explain matrix\n",
    "    ax2 = plt.subplot2grid((4, 4), (0, 2), colspan=2, rowspan = 2)\n",
    "    ax2.imshow(explain_img)\n",
    "    ax2.set_title(\"Fig2: Explain matrix picture of digit %d\" %digit, fontsize=12, fontweight='bold')\n",
    "    \n",
    "    # plot scores\n",
    "    ax3 = plt.subplot2grid((4, 4), (2, 0), colspan=4, rowspan = 2)\n",
    "    greater_than_zero = scores >= 0\n",
    "    lesser_than_zero = scores < 0\n",
    "    ax3.barh(np.arange(len(scores))[greater_than_zero]-0.5, scores[greater_than_zero], color='#87CEFA', height=1)\n",
    "    ax3.barh(np.arange(len(scores))[lesser_than_zero]-0.5, scores[lesser_than_zero], color='#E6E6FA', height=1)\n",
    "    ax3.grid()\n",
    "    ax3.yaxis.set_ticks(np.arange(0, 10, 1))\n",
    "    ax3.yaxis.set_ticks_position('right')\n",
    "    ax3.set_title(\"Fig3: Scores for each number - the number with the highest score wins!\", fontsize=12, fontweight='bold')\n",
    "    ax3.set_ylabel(\"Digits\")\n",
    "    ax3.yaxis.set_label_position('right')\n",
    "    ax3.set_xlabel(\"Scores\")\n",
    "    \n",
    "    plt.tight_layout()\n",
    "    plt.show()\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the representation of the explain matrix (figure 3), the green pixels help increase the score while the red pixels help decrease the score of the chosen digit. The explain matrix will tell us something about the pixels deemed most important. For example, if nothing was drawn in the top left corner of the picture during training, no information will be provided on the top left set of pixels in the explain matrix. During training, if a pixel is not part of the classification rules (i.e. not on any leaf), that pixel will not show up in the explain matrix."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Making a simple web app using MLDB plug-in functionality\n",
    "\n",
    "We've built a very fun web app called [**MLPaint**](http://github.com/mldbai/mlpaint) that uses everything we've shown here to do real-time recognition of digits. The app is shown in the Youtube video at the top of the notebook.\n",
    "\n",
    "The app is built with an MLDB plugin; plugins allow us to extend functionality that we have seen so far. For more information, check out the documentation on [plugins](../../../../doc/#builtin/plugins/Plugins.md.html).\n",
    "\n",
    "By running the cell below, the plugin is checkout from Github and loaded into MLDB:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<strong>PUT http://localhost/v1/plugins/mlpaint</strong><br /><strong style=\"color: green;\">201 Created</strong><br /> <div class=\"highlight\"><pre style=\"line-height: 125%\"><span></span>{\n",
       "  <span style=\"color: #333333; font-weight: bold\">&quot;config&quot;</span>: {\n",
       "    <span style=\"color: #333333; font-weight: bold\">&quot;params&quot;</span>: {\n",
       "      <span style=\"color: #333333; font-weight: bold\">&quot;address&quot;</span>: <span style=\"color: #0000dd\">&quot;git://github.com/mldbai/mlpaint&quot;</span>\n",
       "    }, \n",
       "    <span style=\"color: #333333; font-weight: bold\">&quot;type&quot;</span>: <span style=\"color: #0000dd\">&quot;python&quot;</span>, \n",
       "    <span style=\"color: #333333; font-weight: bold\">&quot;id&quot;</span>: <span style=\"color: #0000dd\">&quot;mlpaint&quot;</span>\n",
       "  }, \n",
       "  <span style=\"color: #333333; font-weight: bold\">&quot;state&quot;</span>: <span style=\"color: #0000dd\">&quot;ok&quot;</span>, \n",
       "  <span style=\"color: #333333; font-weight: bold\">&quot;type&quot;</span>: <span style=\"color: #0000dd\">&quot;python&quot;</span>, \n",
       "  <span style=\"color: #333333; font-weight: bold\">&quot;id&quot;</span>: <span style=\"color: #0000dd\">&quot;mlpaint&quot;</span>\n",
       "}\n",
       "</pre></div>\n"
      ],
      "text/plain": [
       "<Response [201]>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mldb.put(\"/v1/plugins/mlpaint\", {\n",
    "    \"type\": \"python\",\n",
    "    \"params\": {\n",
    "        \"address\": \"git://github.com/mldbai/mlpaint\"\n",
    "    }\n",
    "})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "Now you can browse to [the plugin UI](../../../../v1/plugins/mlpaint/routes/static/index.html).\n",
    "\n",
    "**NOTE: this only works if you're running this Notebook live**, not if you're looking at a static copy on http://docs.mldb.ai. You can this demo by [trying MLDB for free](../../../../doc/#builtin/Running.md.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Where to next?\n",
    "\n",
    "Check out the [Image Processing with Convolutions](../../../../doc/nblink.html#_demos/Image%20Processing%20with%20Convolutions) demo if you are interested in building your own custom image manipulation algorithms.\n",
    "\n",
    "Otherwise, check out the other [Tutorials and Demos](../../../../doc/#builtin/Demos.md.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
